/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Componenten;

/**
 *
 * @author Bram Slob en Roderick van Seijen
 */
import java.io.File;
import java.net.URISyntaxException;
import java.security.CodeSource;
import java.sql.*;

/**
 * 
 * @author Bram Slob en Roderick van Seijen
 */
public class SQLiteConnector {

    private static Connection connection;
    private final static String DB_PATH = "//..//Db//Sokoban.db";

    private static String getWorkingDir(){
        String wd = "";
        try {
            CodeSource codeSource = SQLiteConnector.class.getProtectionDomain().getCodeSource();
            File jarFile = new File(codeSource.getLocation().toURI().getPath());
            wd = jarFile.getParentFile().getPath();
        } 
        catch (URISyntaxException e){
            System.err.println(e);
        }
        return wd;
    }
    
    /**
     * Maak een nieuwe connecit met de database
     * @return een boolean, of de connectie is gelukt.
     */
    public static boolean openConnection() {
        boolean success;
        try {
            Class.forName("org.sqlite.JDBC");

            // create a database connection
            connection = DriverManager.getConnection("jdbc:sqlite:" + getWorkingDir() + DB_PATH);
            success = true;
        } catch (SQLException | ClassNotFoundException e) {
            // if the error message is "out of memory", 
            // it probably means no database file is found
            System.err.println(e.getMessage());
            success = false;
        }

        return success;
    }

    /**
     * Sluit de connectie
     */
    public static void closeConnection() {
        try {
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            // connection close failed.
            System.err.println(e);
        }
    }

    /**
     * Voer een select query uit en krijg een resultaat
     * @param sql een sql select query
     * @return het resultaat
     */
    public static ResultSet runSelectQuery(String sql) {
        ResultSet rs = null;
        try {
            Statement statement = connection.createStatement();
            statement.setQueryTimeout(30);  // set timeout to 30 sec

            rs = statement.executeQuery(sql);
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        return rs;
    }
    
    /**
     * Voer een sql update query uit en krijg een resultaat
     * @param sql een sql update query
     * @return het resultaat
     */
    public static boolean runUpdateQuery(String sql) {
        boolean success;
        try {
            Statement statement = connection.createStatement();
            statement.setQueryTimeout(30);  // set timeout to 30 sec
            statement.executeQuery(sql);
            success = true;
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            success = false;
        }
        
        return success;
    }
}
